﻿using System;
using System.Collections.Generic;
using System.Linq;
using Sungero.Core;
using Sungero.CoreEntities;
using Sungero.Docflow.DeadlineExtensionAssignment;

namespace Sungero.Docflow
{
  partial class DeadlineExtensionAssignmentServerHandlers
  {

    public override void BeforeComplete(Sungero.Workflow.Server.BeforeCompleteEventArgs e)
    {
      if (_obj.Task.ParentAssignment.Status != Workflow.AssignmentBase.Status.InProcess)
      {
        // Добавить автотекст.
        e.Result = DeadlineExtensionAssignments.Resources.Complete;
        return;
      }
      
      if (_obj.Result.Value == Result.ForRework)
      {
        // Проверить заполненность причины отказа.
        if (_obj.Texts.Last().IsAutoGenerated ?? false)
          e.AddError(DeadlineExtensionAssignments.Resources.RefusalReasonNotFilled);
        
        // Добавить автотекст.
        e.Result = DeadlineExtensionAssignments.Resources.Denied;
      }
      else
      {
        // Новый срок должен быть больше старого.
        if (!Functions.Module.CheckDeadline(_obj.Task.Author, _obj.NewDeadline, _obj.ScheduledDate))
          e.AddError(_obj.Info.Properties.NewDeadline, DeadlineExtensionTasks.Resources.DesiredDeadlineIsNotCorrect);
        
        // Добавить автотекст.
        var desiredDeadlineLabel = Functions.DeadlineExtensionTask.GetDesiredDeadlineLabel(_obj.NewDeadline.Value);
        e.Result = DeadlineExtensionAssignments.Resources.DeadlineExtendedFormat(desiredDeadlineLabel);
      }
    }
  }

}